#!/bin/bash

# 上传前端代码到本地nginx目录并更新nginx配置文件

set -e  # 遇到错误时退出

echo "开始上传前端代码到本地nginx目录..."

# Windows环境检测和路径设置
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || "$OSTYPE" == "win32" ]]; then
    # Windows环境
    echo "检测到Windows环境"
    
    # 设置Windows下的nginx路径 (使用系统根目录下的路径)
    HTML_DIR="/c/App/WWW_NGINX/html"
    CONFIG_DIR="/c/App/WWW_NGINX/conf/"
    NGINX_BIN="/c/App/WWW_NGINX/nginx.exe"
    
    # 设置源文件路径 - 修复路径问题
    CURRENT_DIR=$(pwd)
    if [[ "$CURRENT_DIR" == *"/matrix_shell/scripts"* ]]; then
        # 检查当前工作区是否存在matrix_html目录
        if [ -d "../../../matrix_html" ]; then
            HTML_SOURCE_DIR="../../../matrix_html"
        elif [ -d "../../../../demo/matrix_html" ]; then
            HTML_SOURCE_DIR="../../../../demo/matrix_html"
        else
            # 使用当前用户的工作区路径
            HTML_SOURCE_DIR="/c/Users/Administrator/workspace/demo/matrix_html"
        fi
    elif [ -d "../matrix_html" ]; then
        HTML_SOURCE_DIR="../matrix_html"
    elif [ -d "./matrix_html" ]; then
        HTML_SOURCE_DIR="./matrix_html"
    elif [ -d "../../matrix_html" ]; then
        HTML_SOURCE_DIR="../../matrix_html"
    else
        # 使用当前用户的工作区路径
        HTML_SOURCE_DIR="/c/Users/Administrator/workspace/demo/matrix_html"
    fi
    
    # Windows环境下使用nginx_windows.conf配置文件
    NGINX_CONF="nginx_windows.conf"
    
else
    # 其他操作系统环境
    echo "检测到非Windows环境: $OSTYPE"
    
    # 直接寻找matrix_html目录作为HTML源目录
    HTML_SOURCE_DIR=""
    
    echo "尝试查找matrix_html目录:"
    # 检查当前目录及父目录
    if [ -d "matrix_html" ]; then
        echo "  - 在当前目录找到matrix_html"
        HTML_SOURCE_DIR="matrix_html"
    elif [ -d "../matrix_html" ]; then
        echo "  - 在上级目录找到matrix_html"
        HTML_SOURCE_DIR="../matrix_html"
    elif [ -d "../../matrix_html" ]; then
        echo "  - 在上级目录的上级目录找到matrix_html"
        HTML_SOURCE_DIR="../../matrix_html"
    elif [ -d "../../../matrix_html" ]; then
        echo "  - 在上级目录的上级目录的上级目录找到matrix_html"
        HTML_SOURCE_DIR="../../../matrix_html"
    # 检查macOS系统完整路径
    elif [ -d "/Users/yamhk/workspace/demo/matrix_html" ]; then
        echo "  - 在完整路径找到matrix_html"
        HTML_SOURCE_DIR="/Users/yamhk/workspace/demo/matrix_html"
    # 检查Windows系统完整路径（用于Git Bash等环境）
    elif [ -d "/c/Users/YamHK/workspace/demo/matrix_html" ]; then
        echo "  - 在Windows完整路径找到matrix_html"
        HTML_SOURCE_DIR="/c/Users/YamHK/workspace/demo/matrix_html"
    else
        echo "  - 未找到matrix_html目录"
        echo "错误: 无法找到有效的HTML源目录"
        echo "调试信息："
        echo "  - 当前工作目录: $(pwd)"
        echo "  - 请确保在项目目录下执行命令，或检查matrix_html目录位置"
        exit 1
    fi
    
    echo "设置HTML源目录: $HTML_SOURCE_DIR"
    
    # 设置nginx路径
    case "$(uname -s)" in
        Darwin*)
            HTML_DIR="/opt/homebrew/var/www"
            CONFIG_DIR="/opt/homebrew/etc/nginx/"
            NGINX_BIN="/opt/homebrew/bin/nginx"
            NGINX_CONF="nginx_mac.conf"
            ;;
        Linux*)
            HTML_DIR="/usr/local/nginx/html"
            CONFIG_DIR="/usr/local/nginx/conf/"
            NGINX_BIN="/usr/local/nginx/sbin/nginx"
            NGINX_CONF="nginx_linux.conf"
            ;;
        MINGW*|MSYS*|CYGWIN*)
            # Windows (Git Bash, MSYS, Cygwin)
            # 用户实际安装路径：C:\App\WWW_NGINX
            HTML_DIR="/c/App/WWW_NGINX/html"
            CONFIG_DIR="/c/App/WWW_NGINX/conf/"
            NGINX_BIN="/c/App/WWW_NGINX/nginx.exe"
            NGINX_CONF="nginx_windows.conf"
            
            # 备选路径（如果主要路径不存在）
            if [ ! -d "$HTML_DIR" ]; then
                HTML_DIR="/c/nginx/html"
                CONFIG_DIR="/c/nginx/conf/"
                NGINX_BIN="/c/nginx/nginx.exe"
                NGINX_CONF="nginx_windows.conf"
            fi
            if [ ! -d "$HTML_DIR" ]; then
                HTML_DIR="/c/Program Files/nginx/html"
                CONFIG_DIR="/c/Program Files/nginx/conf/"
                NGINX_BIN="/c/Program Files/nginx/nginx.exe"
                NGINX_CONF="nginx_windows.conf"
            fi
            if [ ! -d "$HTML_DIR" ]; then
                # 如果都没有找到，使用用户目录
                HTML_DIR="$HOME/nginx/html"
                CONFIG_DIR="$HOME/nginx/conf/"
                NGINX_BIN="$HOME/nginx/nginx.exe"
                NGINX_CONF="nginx_windows.conf"
            fi
            ;;
        *)
            # Default to Linux paths (for other unixes)
            HTML_DIR="/usr/local/nginx/html"
            CONFIG_DIR="/usr/local/nginx/conf/"
            NGINX_BIN="/usr/local/nginx/sbin/nginx"
            NGINX_CONF="nginx_linux.conf"
            ;;
    esac
fi

echo "当前工作目录: $(pwd)"
echo "HTML源目录: $HTML_SOURCE_DIR"
echo "HTML目标目录: $HTML_DIR"
echo "Nginx配置目录: $CONFIG_DIR"

# 检查HTML源目录是否存在
if [ ! -d "$HTML_SOURCE_DIR" ]; then
    echo "错误: HTML源目录不存在 - $HTML_SOURCE_DIR"
    echo "当前目录内容:"
    ls -la
    # 尝试查找matrix_html目录
    if [ -d "/c/Users/YamHK/workspace/demo/matrix_html" ]; then
        HTML_SOURCE_DIR="/c/Users/YamHK/workspace/demo/matrix_html"
        echo "找到matrix_html目录: $HTML_SOURCE_DIR"
    elif [ -d "/c/Users/Administrator/workspace/demo/matrix_html" ]; then
        HTML_SOURCE_DIR="/c/Users/Administrator/workspace/demo/matrix_html"
        echo "找到matrix_html目录: $HTML_SOURCE_DIR"
    elif [ -d "../../../matrix_html" ]; then
        HTML_SOURCE_DIR="../../../matrix_html"
        echo "找到matrix_html目录: $HTML_SOURCE_DIR"
    elif [ -d "../../../../demo/matrix_html" ]; then
        HTML_SOURCE_DIR="../../../../demo/matrix_html"
        echo "找到matrix_html目录: $HTML_SOURCE_DIR"
    else
        exit 1
    fi
fi

# 检查nginx目录是否存在
if [ ! -d "$(dirname "$HTML_DIR")" ]; then
    echo "错误: nginx目录不存在 - $(dirname "$HTML_DIR")"
    exit 1
fi

# 更新HTML文件
echo "更新HTML文件..."
echo "正在复制: $HTML_SOURCE_DIR/* -> $HTML_DIR/"

# 确保目标目录存在
mkdir -p "$HTML_DIR"

# 备份现有文件
if [ -d "$HTML_DIR" ] && [ "$(ls -A $HTML_DIR)" ]; then
    echo "备份现有HTML文件..."
    
    # 检查是否存在html符号链接（避免循环）
    if [ -L "$HTML_DIR/html" ]; then
        echo "检测到html符号链接，跳过备份以避免循环..."
    else
        cp -r "$HTML_DIR" "${HTML_DIR}_backup_$(date +%Y%m%d_%H%M%S)"
    fi
fi

# 复制文件
if command -v rsync >/dev/null 2>&1; then
    echo "使用rsync进行同步..."
    # 排除html符号链接以避免循环
    rsync -av --delete --exclude="html" "$HTML_SOURCE_DIR/" "$HTML_DIR/"
else
    echo "使用cp命令复制..."
    # 删除html符号链接以避免循环
    if [ -L "$HTML_DIR/html" ]; then
        rm -f "$HTML_DIR/html"
    fi
    rm -rf "$HTML_DIR"/*
    cp -r "$HTML_SOURCE_DIR"/* "$HTML_DIR/"
fi

if [ $? -eq 0 ]; then
    echo "HTML文件更新完成"
else
    echo "错误: HTML文件更新失败"
    exit 1
fi

# 检查并更新nginx配置
echo "检查nginx配置文件..."

# 查找nginx配置源文件
NGINX_CONF_SOURCE=""
PROJECT_ROOT=""

# 确定项目根目录 - 从脚本所在位置获取绝对路径
SCRIPT_DIR=$(dirname "$(realpath "$0")")
PROJECT_ROOT="$(dirname "$(dirname "$(dirname "$SCRIPT_DIR")")")"

# 优先使用matrix_shell/config/nginx目录下的配置
# 构建正确的项目路径
if [ -d "$PROJECT_ROOT/matrix_shell/config/nginx" ]; then
    NGINX_CONF_SOURCE="$PROJECT_ROOT/matrix_shell/config/nginx/$NGINX_CONF"
    if [ ! -f "$NGINX_CONF_SOURCE" ]; then
        NGINX_CONF_SOURCE="$PROJECT_ROOT/matrix_shell/config/nginx/nginx.conf"
    fi
    echo "使用项目根目录下的nginx配置: $NGINX_CONF_SOURCE"
else
    # 检查matrix_shell/config/nginx目录是否存在
    if [ -d "./matrix_shell/config/nginx" ]; then
        NGINX_CONF_SOURCE="./matrix_shell/config/nginx/$NGINX_CONF"
        if [ ! -f "$NGINX_CONF_SOURCE" ]; then
            NGINX_CONF_SOURCE="./matrix_shell/config/nginx/nginx.conf"
        fi
    elif [ -d "../matrix_shell/config/nginx" ]; then
        NGINX_CONF_SOURCE="../matrix_shell/config/nginx/$NGINX_CONF"
        if [ ! -f "$NGINX_CONF_SOURCE" ]; then
            NGINX_CONF_SOURCE="../matrix_shell/config/nginx/nginx.conf"
        fi
    else
        # 回退到脚本所在目录的nginx配置
        NGINX_CONF_SOURCE="$SCRIPT_DIR/../../config/nginx/$NGINX_CONF"
        if [ ! -f "$NGINX_CONF_SOURCE" ]; then
            echo "警告: Nginx配置文件不存在 - $NGINX_CONF_SOURCE"
            echo "使用默认配置文件路径"
            NGINX_CONF_SOURCE="$SCRIPT_DIR/../../config/nginx/nginx.conf"
            if [ ! -f "$NGINX_CONF_SOURCE" ]; then
                echo "警告: 未找到nginx配置文件，跳过配置更新"
                NGINX_CONF_SOURCE=""
            fi
        fi
    fi
fi

if [ -n "$NGINX_CONF_SOURCE" ] && [ -f "$NGINX_CONF_SOURCE" ]; then
    echo "更新nginx配置文件..."
    echo "从: $NGINX_CONF_SOURCE"
    echo "到: $CONFIG_DIR/nginx.conf"
    
    cp -f "$NGINX_CONF_SOURCE" "$CONFIG_DIR/nginx.conf"
    if [ $? -eq 0 ]; then
        echo "nginx配置文件更新成功"
    else
        echo "警告: nginx配置文件更新失败"
    fi
else
    echo "警告: 未找到nginx配置文件，跳过配置更新"
    echo "查找路径: $NGINX_CONF_SOURCE"
fi

# 重载nginx配置
echo "重载nginx配置..."

# 检查nginx是否在运行
if [ -f "$NGINX_BIN" ]; then
    echo "使用nginx可执行文件: $NGINX_BIN"
    
    # 检查nginx进程状态
    if pgrep -f "nginx.exe" > /dev/null 2>&1 || pgrep -f "nginx" > /dev/null 2>&1; then
        echo "检测到nginx进程正在运行，执行重载..."
        # macOS系统使用sudo
        if [[ "$OSTYPE" == "darwin"* ]]; then
            sudo "$NGINX_BIN" -s reload
        else
            # 使用-c参数指定配置文件路径，使用-p参数指定前缀路径
            "$NGINX_BIN" -s reload -c "$CONFIG_DIR/nginx.conf" -p "/c/App/WWW_NGINX"
        fi
        if [ $? -eq 0 ]; then
            echo "nginx重载成功"
        else
            echo "警告: nginx重载失败，尝试重启..."
            # 杀掉现有nginx进程
            if [[ "$OSTYPE" == "darwin"* ]]; then
                sudo pkill -f nginx 2>/dev/null || true
            else
                pkill -f nginx.exe 2>/dev/null || true
            fi
            sleep 2
            # 后台启动nginx
            if [[ "$OSTYPE" == "darwin"* ]]; then
                sudo "$NGINX_BIN" -c "$CONFIG_DIR/nginx.conf" >/dev/null 2>&1 &
            else
                "$NGINX_BIN" -c "$CONFIG_DIR/nginx.conf" -p "/c/App/WWW_NGINX" >/dev/null 2>&1 &
            fi
            if [ $? -eq 0 ]; then
                echo "nginx后台启动成功"
            else
                echo "错误: nginx后台启动失败"
            fi
        fi
    else
        echo "nginx未运行，尝试启动..."
        # 后台启动nginx
        if [[ "$OSTYPE" == "darwin"* ]]; then
            sudo "$NGINX_BIN" -c "$CONFIG_DIR/nginx.conf" >/dev/null 2>&1 &
        else
            "$NGINX_BIN" -c "$CONFIG_DIR/nginx.conf" -p "/c/App/WWW_NGINX" >/dev/null 2>&1 &
        fi
        if [ $? -eq 0 ]; then
            echo "nginx后台启动成功"
        else
            echo "错误: nginx后台启动失败"
        fi
    fi
else
    echo "警告: nginx可执行文件不存在 - $NGINX_BIN"
    echo "尝试使用系统PATH中的nginx..."
    
    if command -v nginx >/dev/null 2>&1; then
        echo "使用系统nginx命令"
        if [[ "$OSTYPE" == "darwin"* ]]; then
            sudo nginx -c "$CONFIG_DIR/nginx.conf" >/dev/null 2>&1 &
        else
            nginx -c "$CONFIG_DIR/nginx.conf" -p "/c/App/WWW_NGINX" >/dev/null 2>&1 &
        fi
        if [ $? -eq 0 ]; then
            echo "nginx后台启动成功"
        else
            echo "错误: nginx后台启动失败"
        fi
    else
        echo "错误: 系统中未找到nginx"
    fi
fi

echo ""
echo "=== 部署完成 ==="
echo "部署目录: $HTML_SOURCE_DIR"
echo "HTML目标目录: $HTML_DIR"
echo "nginx配置目录: $CONFIG_DIR"
echo "nginx可执行文件: $NGINX_BIN"

# 显示访问信息
echo ""
echo "=== 访问信息 ==="
if [ -f "$HTML_DIR/index.html" ]; then
    echo "✅ HTML文件已部署"
    echo "🌐 本地访问地址: http://localhost/"
    echo "📁 部署目录: $HTML_DIR"
else
    echo "⚠️  警告: index.html不存在，请检查部署"
fi

# 显示最近的nginx错误
if [ -f "/c/App/WWW_NGINX/logs/error.log" ]; then
    echo ""
    echo "=== 最近的nginx错误日志 ==="
    tail -5 "/c/App/WWW_NGINX/logs/error.log" 2>/dev/null || echo "无法读取错误日志"
fi

echo ""
echo "如果nginx仍无法访问，请检查:"
echo "1. 防火墙设置"
echo "2. nginx配置文件语法"
echo "3. 端口占用情况 (netstat -an | grep :80)"